// promise 队列  非阻塞 , 按照task 先后执行， 其中一个失败不影响 会有 errorTask接受失败的msg
export class TaskQueue {
  constructor() {
    this.tasks = [];
    this.errorTask = [];
  }
  addTask(task) {
    this.tasks.push(task);
  }
  showErrorTask() {
    return this.errorTask;
  }
  run() {
    const results = [];
    const executeTask = () => {
      if (this.tasks.length === 0) {
        return Promise.resolve(results);
      }
      const task = this.tasks.shift();
      return Promise.resolve(task())
        .then((result) => {
          results.push({
            task: task,
            result: result,
          });
          return executeTask();
        })
        .catch((error) => {
          this.errorTask.push({
            task: task,
            error: error,
          });
          return executeTask();
        });
    };
    return executeTask();
  }
}
